<?php

namespace app\adminapi\controller;

use think\Controller;
use think\Request;

class Role extends BaseApi
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        # 查询所有的角色
        $data = \app\common\model\Role::select();
        # 循环查询获取到的角色
        foreach ($data as $k => $v) {
            # 判断他是不是超级管理员 如果是超级管理就查询到所有权限返回，并拼接成父级树状返回
            if ($v["id"] == 1) {
                # 查询所有权限
                $list = \app\common\model\Auth::select();
                # 转为二唯数组
                $list = (new \think\Collection($list))->toArray();
                # 使用封装好的数组拼接成父级树状返回  并指定一个下标
                $data[$k]["role_auths"] = get_tree_list($list);
            } else {
                # 不是超级管理，那就查询到他对应的所有权限
                $list = \app\common\model\Auth::where("id", "in", $v["role_auth_ids"])->select();
                # 转为二维数组
                $list = (new \think\Collection($list))->toArray();
                # 使用封装好的数组拼接成父级树状返回   并指定一个下标
                $data[$k]["role_auths"] = get_tree_list($list);
            }
        }
        # 返回数据
        $this->ok($data);
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        # 接收数据
        $params = input();
        # 数据检测
        $validata = $this->validate($params, [
            "role_name|角色名称" => "require",
            "auth_ids|分配的权限ID" => "require",
        ]);
        if ($validata !== true) {
            $this->fail($validata);
        }
        # 处理数据
        if (is_array($params["auth_ids"])) {
            # 他传入的是一个数组 那就使用 implode 使用 逗号把拼接成字符串 并重新指定下标
            $params["role_auth_ids"] = implode(",", $params["auth_ids"]);
        } else {
            # 如果不是那就返回一个错误提示
            $this->fail("请上传数组");
        }
        # 添加数据
        $data = \app\common\model\Role::create($params, true);
        $find = \app\common\model\Role::find($data["id"]);
        # 返回数据
        $this->ok($find,200,"添加角色成功");
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        $find = \app\common\model\Role::find($id);
        $this->ok($find);
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        # 接收数据
        $params = input();
        # 数据检测
        $validata = $this->validate($params, [
            "role_name|角色名称" => "require",
            "auth_ids|分配的权限ID" => "require",
        ]);
        if ($validata !== true) {
            $this->fail($validata);
        }
        # 处理数据
        # 判断他是不是传入一个数组
        if (is_array($params["auth_ids"])) {
            # 他传入的是一个数组 那就使用 implode 使用 逗号把拼接成字符串 并重新指定下标
            $params["role_auth_ids"] = implode(",", $params["auth_ids"]);
        } else {
            $params["role_auth_ids"] = $params["auth_ids"];
        }
        # 添加数据
        $data = \app\common\model\Role::update($params,["id"=>$id], true);
        $find = \app\common\model\Role::find($data["id"]);
        # 返回数据
        $this->ok($find,200,"修改角色成功");
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        # 根据id查询到admin表
        $admin = \app\common\model\Admin::where("role_id",$id)->count();
        # 判断在传入进来的角色id里面是不是还有管理员存在，如果有那就不能删除
        if($admin > 0){
            $this->fail("角色下有管理员不能删除");
        }
        # 没有那就删除
        \app\common\model\Role::destroy($id);
        $this->ok("删除成功");
    }
}
